<?php
/**
 * User: LRZ
 * Date: 2020/1/13
 * Time: 22:18
 */

/**
 *  414.第三大的数
 *
 *  标签：数组
 *
 *  给定一个非空数组，返回此数组中第三大的数。如果不存在，则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
 *
 *  示例 1:
 *      输入: [3, 2, 1]
 *      输出: 1
 *      解释: 第三大的数是 1.
 *
 *  示例 2:
 *      输入: [1, 2]
 *      输出: 2
 *      解释: 第三大的数不存在, 所以返回最大的数 2 .
 *
 *  示例 3:
 *      输入: [2, 2, 3, 1]
 *      输出: 1
 *      解释: 注意，要求返回第三大的数，是指第三大且唯一出现的数。存在两个值为2的数，它们都排第二。
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/third-maximum-number
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$nums = [2, 2, 3, 1];
$res  = thirdMax($nums);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function thirdMax($nums)
{
    $nums = array_unique($nums);
    rsort($nums);
    if (count($nums) >= 3) {
        return $nums[2];
    }
    return $nums[0];
}
